#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define High 22  // 游戏画面尺寸
#define Width 11

int canvas[High][Width] = {0};

void gotoxy(int x,int y)  //光标移动到(x,y)位置
{
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD pos;
    pos.X = x;
    pos.Y = y;
    SetConsoleCursorPosition(handle,pos);
}

void startup() // 数据初始化
{
	int i,j;
	
	// 初始化边框
	for (i=0;i<High;i++)
	{
		canvas[i][0] = -1;
		canvas[i][Width-1] = -1;
	}
	for (j=0;j<Width;j++)
	{
		canvas[0][j] = -1;
		canvas[High-1][j] = -1;
	}

}

void show()  // 显示画面
{
	gotoxy(0,0);  // 光标移动到原点位置，以下重画清屏
	int i,j;
	for (i=0;i<High;i++)
	{
		for (j=0;j<Width;j++)
		{
			if (canvas[i][j]==0)
				printf(" ");   //   输出空格
			else if (canvas[i][j]==-1)
				printf("#");   //   输出边框#
		}
		printf("\n");
	}
}
void main()
{
	startup();
	int i,j;
	int x = 0;
	int y = 5;
	
	int top = 20;
	int low = 0;
	int left = 0;
	int right = 10;
	int v_x = 1;
	int v_y = 1;
	
	while (1)
	{
		show();
		x=x+v_x;
		y=y+v_y;
		system("cls");
		
		for(i=0;i<x;i++)
			printf("\n");
		for (j=0;j<y;j++)
			printf(" ");
		printf("o");
		printf("\n"); 
		
		Sleep(10);

		if ((x==top)||(x==low)) {
			v_x = -v_x;
			printf("\a");
		}
		if ((y==left)||(y==right)) {
			v_y = -v_y;
			printf("\a");
		}
	}	
}